Sources/XCMetricsClient/Log Management/Builders.swift (332 lines of code) (raw):

// Copyright (c) 2020 Spotify AB. // // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. import CryptoSwift import Foundation import XCLogParser /// Builder for the generated protobuf class Com_Spotify_Xcmetrics_Build class BuildBuilder { var startTimestamp: Int64 { xcmetricsBuild.startTimestamp } private var xcmetricsBuild = Build() func withProjectName(_ projectName: String) -> BuildBuilder { xcmetricsBuild.projectName = projectName return self } func withUserID(_ userID: String) -> BuildBuilder { xcmetricsBuild.userid = userID return self } func withUserID256(_ userID256: String) -> BuildBuilder { xcmetricsBuild.userid256 = userID256 return self } func withIsCi(_ isCi: Bool) -> BuildBuilder { xcmetricsBuild.isCi = isCi return self } func withCategory(_ category: String) -> BuildBuilder { xcmetricsBuild.category = category return self } func withCompiledCount(_ compiledCount: Int) -> BuildBuilder { xcmetricsBuild.compiledCount = Int32(compiledCount) return self } func withWasSuspended(_ wasSuspended: Bool) -> BuildBuilder { xcmetricsBuild.wasSuspended = wasSuspended return self } func withBuildStep(_ buildStep: BuildStep) -> BuildBuilder { xcmetricsBuild.identifier = buildStep.identifier xcmetricsBuild.machineName = buildStep.machineName xcmetricsBuild.schema = buildStep.schema xcmetricsBuild.startTimestamp = Int64(round(buildStep.startTimestamp)) xcmetricsBuild.endTimestamp = Int64(round(buildStep.endTimestamp)) xcmetricsBuild.startTimestampMicroseconds = buildStep.startTimestamp xcmetricsBuild.endTimestampMicroseconds = buildStep.endTimestamp xcmetricsBuild.duration = buildStep.duration.roundToDecimal(9) xcmetricsBuild.buildStatus = buildStep.buildStatus xcmetricsBuild.warningCount = Int32(buildStep.warningCount) xcmetricsBuild.errorCount = Int32(buildStep.errorCount) xcmetricsBuild.compilationEndTimestamp = Int64(round(buildStep.compilationEndTimestamp)) xcmetricsBuild.compilationEndTimestampMicroseconds = buildStep.compilationEndTimestamp xcmetricsBuild.compilationDuration = buildStep.compilationDuration.roundToDecimal(9) return self } func build() -> Build { return xcmetricsBuild } } /// Builder for the generated protobuf class Com_Spotify_Xcmetrics_TargetBuild class TargetBuilder { var fetchedFromCache: Bool { return targetBuild.fetchedFromCache } var identifier: String { return targetBuild.identifier } private var targetBuild = TargetBuild() func withCategory(_ category: String) -> TargetBuilder { targetBuild.category = category return self } func withCompiledCount(_ compiledCount: Int) -> TargetBuilder { targetBuild.compiledCount = Int32(compiledCount) return self } func withBuildStep(_ buildStep: BuildStep) -> TargetBuilder { targetBuild.identifier = buildStep.identifier targetBuild.buildIdentifier = buildStep.parentIdentifier targetBuild.name = buildStep.title.replacingOccurrences(of: "Build target ", with: "") targetBuild.startTimestamp = Int64(round(buildStep.startTimestamp)) targetBuild.endTimestamp = Int64(round(buildStep.endTimestamp)) targetBuild.startTimestampMicroseconds = buildStep.startTimestamp targetBuild.endTimestampMicroseconds = buildStep.endTimestamp targetBuild.duration = buildStep.duration.roundToDecimal(9) targetBuild.warningCount = Int32(buildStep.warningCount) targetBuild.errorCount = Int32(buildStep.errorCount) targetBuild.fetchedFromCache = buildStep.fetchedFromCache targetBuild.compilationEndTimestamp = Int64(round(buildStep.compilationEndTimestamp)) targetBuild.compilationEndTimestampMicroseconds = buildStep.compilationEndTimestamp targetBuild.compilationDuration = buildStep.compilationDuration.roundToDecimal(9) return self } func build() -> TargetBuild { return targetBuild } } /// Builder for the generated protobuf class Com_Spotify_Xcmetrics_StepBuild class StepBuilder { private var stepBuild = StepBuild() func withBuildIdentifier(_ buildIdentifier: String) -> StepBuilder { stepBuild.buildIdentifier = buildIdentifier return self } func withTargetIdentifier(_ targetIdentifier: String) -> StepBuilder { stepBuild.targetIdentifier = targetIdentifier return self } func withBuildStep(_ buildStep: BuildStep) -> StepBuilder { stepBuild.identifier = buildStep.identifier stepBuild.title = buildStep.title stepBuild.signature = buildStep.signature stepBuild.type = buildStep.detailStepType.rawValue stepBuild.architecture = buildStep.architecture stepBuild.documentURL = buildStep.documentURL stepBuild.startTimestamp = Int64(round(buildStep.startTimestamp)) stepBuild.endTimestamp = Int64(round(buildStep.endTimestamp)) stepBuild.startTimestampMicroseconds = buildStep.startTimestamp stepBuild.endTimestampMicroseconds = buildStep.endTimestamp stepBuild.duration = buildStep.duration.roundToDecimal(9) stepBuild.warningCount = Int32(buildStep.warningCount) stepBuild.errorCount = Int32(buildStep.errorCount) stepBuild.fetchedFromCache = buildStep.fetchedFromCache return self } func build() -> StepBuild { return stepBuild } } /// Builder for the generated protobuf class Com_Spotify_Xcmetrics_FunctionBuild class FunctionBuilder { private var functionBuild = FunctionBuild() func withBuildIdentifier(_ buildIdentifier: String) -> FunctionBuilder { functionBuild.buildIdentifier = buildIdentifier return self } func withStepIdentifier(_ stepIdentifier: String) -> FunctionBuilder { functionBuild.stepIdentifier = stepIdentifier return self } func withFunctionTime(_ functionTime: SwiftFunctionTime) -> FunctionBuilder { functionBuild.file = functionTime.file functionBuild.startingLine = Int32(functionTime.startingLine) functionBuild.startingColumn = Int32(functionTime.startingColumn) functionBuild.signature = functionTime.signature functionBuild.duration = functionTime.durationMS functionBuild.occurrences = Int32(functionTime.occurrences) return self } func build() -> FunctionBuild { return functionBuild } } /// Builder for the generated protobuf class Com_Spotify_Xcmetrics_WarningBuild class WarningBuilder { private var warningBuild = WarningBuild() func withBuildIdentifier(_ buildIdentifier: String) -> WarningBuilder { warningBuild.buildIdentifier = buildIdentifier return self } func withParentIdentifier(_ parentIdentifier: String) -> WarningBuilder { warningBuild.parentIdentifier = parentIdentifier return self } func withParentType(_ parentType: String) -> WarningBuilder { warningBuild.parentType = parentType return self } func withNotice(_ notice: Notice) -> WarningBuilder { warningBuild.title = notice.title warningBuild.type = notice.type.rawValue warningBuild.documentURL = notice.documentURL warningBuild.clangFlag = notice.clangFlag ?? "" warningBuild.severity = Int32(notice.severity) warningBuild.startingLine = Int32.fromUInt64(notice.startingLineNumber) warningBuild.endingLine = Int32.fromUInt64(notice.endingLineNumber) warningBuild.startingColumn = Int32.fromUInt64(notice.startingColumnNumber) warningBuild.endingColumn = Int32.fromUInt64(notice.endingColumnNumber) warningBuild.characterRangeStart = Int32.fromUInt64(notice.characterRangeStart) warningBuild.characterRangeEnd = Int32.fromUInt64(notice.characterRangeEnd) return self } func build() -> WarningBuild { return warningBuild } } /// Builder for the generated protobuf class Com_Spotify_Xcmetrics_ErrorBuild class ErrorBuilder { private var errorBuild = ErrorBuild() func withBuildIdentifier(_ buildIdentifier: String) -> ErrorBuilder { errorBuild.buildIdentifier = buildIdentifier return self } func withParentIdentifier(_ parentIdentifier: String) -> ErrorBuilder { errorBuild.parentIdentifier = parentIdentifier return self } func withParentType(_ parentType: String) -> ErrorBuilder { errorBuild.parentType = parentType return self } func withNotice(_ notice: Notice) -> ErrorBuilder { errorBuild.title = notice.title errorBuild.type = notice.type.rawValue errorBuild.documentURL = notice.documentURL errorBuild.severity = Int32(notice.severity) errorBuild.startingLine = Int32.fromUInt64(notice.startingLineNumber) errorBuild.endingLine = Int32.fromUInt64(notice.endingLineNumber) errorBuild.startingColumn = Int32.fromUInt64(notice.startingColumnNumber) errorBuild.endingColumn = Int32.fromUInt64(notice.endingColumnNumber) errorBuild.endingColumn = Int32.fromUInt64(notice.endingColumnNumber) errorBuild.characterRangeStart = Int32.fromUInt64(notice.characterRangeStart) errorBuild.characterRangeEnd = Int32.fromUInt64(notice.characterRangeEnd) return self } func build() -> ErrorBuild { return errorBuild } } /// Builder for the generated protobuf class Com_Spotify_Xcmetrics_NoteBuild class NoteBuilder { private var noteBuild = NoteBuild() func withBuildIdentifier(_ buildIdentifier: String) -> NoteBuilder { noteBuild.buildIdentifier = buildIdentifier return self } func withParentIdentifier(_ parentIdentifier: String) -> NoteBuilder { noteBuild.parentIdentifier = parentIdentifier return self } func withParentType(_ parentType: String) -> NoteBuilder { noteBuild.parentType = parentType return self } func withNotice(_ notice: Notice) -> NoteBuilder { noteBuild.title = notice.title noteBuild.documentURL = notice.documentURL noteBuild.severity = Int32(notice.severity) noteBuild.startingLine = Int32.fromUInt64(notice.startingLineNumber) noteBuild.endingLine = Int32.fromUInt64(notice.endingLineNumber) noteBuild.startingColumn = Int32.fromUInt64(notice.startingColumnNumber) noteBuild.endingColumn = Int32.fromUInt64(notice.endingColumnNumber) noteBuild.characterRangeStart = Int32.fromUInt64(notice.characterRangeStart) noteBuild.characterRangeEnd = Int32.fromUInt64(notice.characterRangeEnd) return self } func build() -> NoteBuild { return noteBuild } } class XCMetricsBuilder { private var request = UploadBuildMetricsRequest() func withVersion(_ version: Int) -> XCMetricsBuilder { request.version = Int32(version) return self } func withBuild(_ build: Build) -> XCMetricsBuilder { request.build = build return self } func withTargets(_ targets: [TargetBuild]) -> XCMetricsBuilder { request.targets = targets return self } func withSteps(_ steps: [StepBuild]) -> XCMetricsBuilder { request.steps = steps return self } func withFunctions(_ functions: [FunctionBuild]) -> XCMetricsBuilder { request.functions = functions return self } func withWarnings(_ warnings: [WarningBuild]) -> XCMetricsBuilder { request.warnings = warnings return self } func withErrors(_ errors: [ErrorBuild]) -> XCMetricsBuilder { request.errors = errors return self } func withNotes(_ notes: [NoteBuild]) -> XCMetricsBuilder { request.notes = notes return self } func withBuildHost(_ buildHost: BuildHost) -> XCMetricsBuilder { request.buildHost = buildHost return self } func withXcodeVersion(_ xcodeVersion: XcodeVersion) -> XCMetricsBuilder { request.xcodeVersion = xcodeVersion return self } func withBuildMetadata(_ buildMetadata: BuildMetadata) -> XCMetricsBuilder { request.buildMetadata = buildMetadata return self } func withSwiftTypeChecks(_ swiftTypeChecks: [SwiftTypeCheckBuild]) -> XCMetricsBuilder { request.typeChecks = swiftTypeChecks return self } func withOtherMetrics(_ other: UploadBuildMetricsRequest) -> XCMetricsBuilder { request.build = other.build request.errors = other.errors request.functions = other.functions request.buildHost = other.buildHost request.notes = other.notes request.buildMetadata = other.buildMetadata request.steps = other.steps request.targets = other.targets request.warnings = other.warnings request.version = other.version request.typeChecks = other.typeChecks return self } func build() -> UploadBuildMetricsRequest { return request } } /// Builder for the generated protobuf class Com_Spotify_Xcmetrics_TypeCheckBuild class SwiftTypeCheckBuilder { private var swiftTypeCheckBuild = SwiftTypeCheckBuild() func withBuildIdentifier(_ buildIdentifier: String) -> SwiftTypeCheckBuilder { swiftTypeCheckBuild.buildIdentifier = buildIdentifier return self } func withStepIdentifier(_ stepIdentifier: String) -> SwiftTypeCheckBuilder { swiftTypeCheckBuild.stepIdentifier = stepIdentifier return self } func withTypeCheck(_ typeCheck: SwiftTypeCheck) -> SwiftTypeCheckBuilder { swiftTypeCheckBuild.file = typeCheck.file swiftTypeCheckBuild.startingLine = Int32(typeCheck.startingLine) swiftTypeCheckBuild.startingColumn = Int32(typeCheck.startingColumn) swiftTypeCheckBuild.duration = typeCheck.durationMS swiftTypeCheckBuild.occurrences = Int32(typeCheck.occurrences) return self } func build() -> SwiftTypeCheckBuild { return swiftTypeCheckBuild } }